<!DOCTYPE html>
<html lang="en">
<head>
        <meta charset="utf-8" />
        <title>chapter5</title>
        <link rel="stylesheet" href="/theme/css/main.css" />

        <!--[if IE]>
            <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->
</head>

<body id="index" class="home">
        <header id="banner" class="body">
                <h1><a href="/">PythonTutorials </a></h1>
                <nav><ul>
                    <li class="active"><a href="/category/cpp.html">cpp</a></li>
                    <li><a href="/category/python.html">python</a></li>
                </ul>
                </nav>
        </header><!-- /#banner -->
<section id="content" class="body">
  <article>
    <header>
      <h1 class="entry-title">
        <a href="/c-chapter5.html" rel="bookmark"
           title="Permalink to chapter5">chapter5</a></h1>
    </header>

    <div class="entry-content">
<footer class="post-info">
        <span>Mon 06 April 2020</span>
<span>| tags: <a href="/tag/cpp.html">cpp</a><a href="/tag/progarmming.html">progarmming</a></span>
</footer><!-- /.post-info -->      <h1>循环结构</h1>
<h4>定义：从main()开始，从上向下，使得某些语句重复执行</h4>
<ul>
<li>控制（表达式）</li>
<li>基础语句（循环体）</li>
</ul>
<h4>循环结构的程序：在顺序语句中加入循环控制语句（3+1个）</h4>
<h4>循环控制语句(开关)</h4>
<ol>
<li>
<p>==方式1：while(表达式){循环体语句序列;}==</p>
<ol>
<li>while语句（当型循环）{循环体语句序列;} 后继语句</li>
<li>while整体为一条控制语句，注意执行过程</li>
<li>while后面的表达式需要加小括号</li>
<li>while控制一条语句(复合语句)</li>
<li>复合语句算一条语句</li>
<li>有可能一次都不执行（0次或者0次以上）</li>
<li>外面有初始值，括号内有条件表达式，循环体有增量。</li>
</ol>
</li>
<li>
<p>==方式2：do—while循环（直到型循环==）</p>
<ol>
<li>do{循环体语句序列；}while(表达式);后续语句</li>
<li>while加括号，后面有分号。</li>
<li>do不能单独出现，（else也不能单独出现）</li>
<li>do只能就近控制一条，如果多条，一定需要加花括号{},</li>
<li>至少执行一次（1次或者一次以上</li>
<li>do while之间不能有第三者（必须加花括号）</li>
</ol>
</li>
<li>
<p>==方式3：for(;;){循环体语句序列;}==</p>
<ol>
<li>for(expr1;expr2;expr3){循环体语句；} </li>
<li>三个表达式，两个分号</li>
<li>执行过程：先计算表达式1，然后计算表达式2(0或者1)， 如果是非0执行循环体，然后返回表达式3，表达式3运算之后。然后返回表达式2，继续判断；如果表达式条件为假，退出循环体</li>
<li>表达式1值只执行一次，初始化条件</li>
<li>表达式2是条件判断，返回0或者非0</li>
<li>表达式3是增量式，影响表达式2的结果，</li>
<li>如果表达式2永为真，则为死循环</li>
<li>for中的两个分号不能少</li>
<li>如果for表达式2缺少的话，默认值为1，永为真。</li>
<li>expr1课放在for之前，expr3可以放在循环体内</li>
<li>经典举例<ol>
<li>for(i=1;i++&lt;4;);Q：循环体执行几次？后继语句的i等于多少？</li>
<li>for(i=1,++i&lt;4;i++);循环体执行几次？后继语句的i等于多少？</li>
<li>A：(1)循环3次，i = 5；(2)循环一次，i = 4</li>
</ol>
</li>
</ol>
</li>
<li>
<p>==方式4：if(){}else{} 与goto配合使用。==</p>
<ol>
<li>```
sum4() {
    int i = 1, sum = 0;</li>
</ol>
<p>SUM:sum += i; //分号决定了sum是个标号
    i++;
    if (i &lt;= 100) goto SUM;</p>
<div class="highlight"><pre><span></span>printf(&quot;sum4：%d&quot;, sum);
</pre></div>


<p>}
```
5. ==双循环结构==
1. 双循环开始于外循环；
2. 循环由外向内
3. 对于外循环的每一个变量，内循环都要跑一圈，即知道内循环的条件为假
3. 内循环结束之后回到外循环的表达式
4. 当内、外循环都结束时，循环条件都为假，退出内外循环。</p>
</li>
</ol>
<div class="highlight"><pre><span></span><span class="o">//</span><span class="nt">辗转相减法求最大公约数</span><span class="err">（</span><span class="nt">算法</span><span class="err">）</span>
<span class="nt">while_loop</span><span class="o">()</span> <span class="p">{</span>
    <span class="err">int</span> <span class="err">m,</span> <span class="err">n</span><span class="p">;</span>   <span class="err">//语句1</span>

    <span class="err">printf(&quot;enter</span> <span class="err">m,</span> <span class="n">n</span><span class="p">:</span><span class="o">&gt;</span><span class="s2">&quot;); //语句2</span>
<span class="s2">    scanf(&quot;</span><span class="o">%</span><span class="n">d</span><span class="o">%</span><span class="n">d</span><span class="s2">&quot;, &amp;m, &amp;n);  //语句3</span>

<span class="s2">    while (m != n) {        //语句4，双循环结构</span>
<span class="s2">        while (m &gt; n)</span>
<span class="s2">        {</span>
<span class="s2">            m -= n;</span>
<span class="s2">        }</span>
<span class="s2">        while (n &gt; m) </span>
<span class="s2">        { </span>
<span class="s2">            n -= m; </span>
<span class="s2">        }</span>
<span class="s2">    }</span>
<span class="s2">    printf(&quot;</span><span class="n">m</span><span class="o">=%</span><span class="n">d</span><span class="err">\</span><span class="n">n</span><span class="err">&quot;</span><span class="p">,</span> <span class="n">m</span><span class="p">);</span>    <span class="err">//语句5</span>
<span class="p">}</span>
</pre></div>


<h2>控制语句</h2>
<ol>
<li>
<p>break</p>
<ol>
<li>格式：break;</li>
<li>功能：中止退出，跳出语句</li>
<li>范围：循环体中，switch的case语句中。</li>
<li>备注：循环体结束的方式有两种，①表达式条件为假；②break语句。</li>
</ol>
</li>
<li>
<p>continue</p>
<ol>
<li>格式：continue；</li>
<li>功能：结束一次循环继续，跳回</li>
<li>范围：只能用于循环体中。</li>
<li>注：用于for循环体时，continue将跳回表达式3，用于while/do...while时，跳回while后的表达式。</li>
<li>代码范例：</li>
</ol>
</li>
</ol>
<div class="highlight"><pre><span></span>for(i=1;i&lt;4;i++)
{
    int i;
    i++;
    continue;
}
printf(&quot;&amp;d&quot;,i);
</pre></div>


<h3>例题分析</h3>
<ol>
<li>for(x=0,y=0;y!=250 || x &lt;4;x++) y+=50;求循环次数（答案为5）</li>
<li></li>
</ol>
<h5>控制语句：do。。。while、while、else、if、switch、for</h5>
<h3>C语言六大器</h3>
<ul>
<li>累加器（==累加变量需要初始化==，如int, sum = 0；sum += i；）</li>
<li>累乘器（累加变量需要初始化，如int, sum = 1；sum *= i；）</li>
<li>计数器</li>
<li>最大器</li>
<li>最小器</li>
</ul>
    </div><!-- /.entry-content -->

  </article>
</section>
        <section id="extras" class="body">
                <div class="blogroll">
                        <h2>blogroll</h2>
                        <ul>
                            <li><a href="http://getpelican.com/">Pelican</a></li>
                            <li><a href="http://python.org/">Python.org</a></li>
                            <li><a href="http://jinja.pocoo.org/">Jinja2</a></li>
                            <li><a href="#">You can modify those links in your config file</a></li>
                        </ul>
                </div><!-- /.blogroll -->
                <div class="social">
                        <h2>social</h2>
                        <ul>

                            <li><a href="#">You can add links in your config file</a></li>
                            <li><a href="#">Another social link</a></li>
                        </ul>
                </div><!-- /.social -->
        </section><!-- /#extras -->

        <footer id="contentinfo" class="body">
                <p>Powered by <a href="http://www.maxiaoan.com/">Maxiaoan</a></p>
        </footer><!-- /#contentinfo -->

</body>
</html>